package leetcode.leetcode0xx.leetcode37;

import org.junit.jupiter.api.Test;

import static org.junit.jupiter.api.Assertions.assertArrayEquals;

class SolutionTest {

    @Test
    void test1() {
        char[][] board = {
                {'5', '3', '.', '.', '7', '.', '.', '.', '.'},
                {'6', '.', '.', '1', '9', '5', '.', '.', '.'},
                {'.', '9', '8', '.', '.', '.', '.', '6', '.'},
                {'8', '.', '.', '.', '6', '.', '.', '.', '3'},
                {'4', '.', '.', '8', '.', '3', '.', '.', '1'},
                {'7', '.', '.', '.', '2', '.', '.', '.', '6'},
                {'.', '6', '.', '.', '.', '.', '2', '8', '.'},
                {'.', '.', '.', '4', '1', '9', '.', '.', '5'},
                {'.', '.', '.', '.', '8', '.', '.', '7', '9'}
        };
        char[][] expected = {
                {'5', '3', '4', '6', '7', '8', '9', '1', '2'},
                {'6', '7', '2', '1', '9', '5', '3', '4', '8'},
                {'1', '9', '8', '3', '4', '2', '5', '6', '7'},
                {'8', '5', '9', '7', '6', '1', '4', '2', '3'},
                {'4', '2', '6', '8', '5', '3', '7', '9', '1'},
                {'7', '1', '3', '9', '2', '4', '8', '5', '6'},
                {'9', '6', '1', '5', '3', '7', '2', '8', '4'},
                {'2', '8', '7', '4', '1', '9', '6', '3', '5'},
                {'3', '4', '5', '2', '8', '6', '1', '7', '9'}
        };
        new Solution().solveSudoku(board);
        assertArrayEquals(expected, board);
    }

    @Test
    void test2() {
        char[][] board = {
                {'.', '.', '.', '.', '.', '.', '.', '.', '.'},
                {'.', '.', '.', '.', '.', '3', '.', '8', '5'},
                {'.', '.', '1', '.', '2', '.', '.', '.', '.'},
                {'.', '.', '.', '5', '.', '7', '.', '.', '.'},
                {'.', '.', '4', '.', '.', '.', '1', '.', '.'},
                {'.', '9', '.', '.', '.', '.', '.', '.', '.'},
                {'5', '.', '.', '.', '.', '.', '.', '7', '3'},
                {'.', '.', '2', '.', '1', '.', '.', '.', '.'},
                {'.', '.', '.', '.', '4', '.', '.', '.', '9'}
        };
        char[][] expected = {
                {'9', '8', '7', '6', '5', '4', '3', '2', '1'},
                {'2', '4', '6', '1', '7', '3', '9', '8', '5'},
                {'3', '5', '1', '9', '2', '8', '7', '4', '6'},
                {'1', '2', '8', '5', '3', '7', '6', '9', '4'},
                {'6', '3', '4', '8', '9', '2', '1', '5', '7'},
                {'7', '9', '5', '4', '6', '1', '8', '3', '2'},
                {'5', '1', '9', '2', '8', '6', '4', '7', '3'},
                {'4', '7', '2', '3', '1', '9', '5', '6', '8'},
                {'8', '6', '3', '7', '4', '5', '2', '1', '9'}
        };
        new Solution().solveSudoku(board);
        assertArrayEquals(expected, board);
    }
}